package com.itheima.edu.info.manager.dao;

import com.itheima.edu.info.manager.domain.Student;

/*
    库管类
        1.核心职责是管理我们的数据仓库-- 数组: 增删改查
        2.这里的所有方法【功能】都是给业务员用
 */
public class StudentDao implements BaseStudentDao{

    //1. 创建一个长度为5的学生数组,用来充当数据仓库
    private static Student[] stuArray = new Student[5];

    //通过静态代码块的设计让系统在加载StudentDao.class的时候自动执行静态代码块代码，初始化两个学生对象到数组容器中
    static {
        Student stu1 = new Student("heima001","张三","23","1999-11-11");
        Student stu2 = new Student("heima002","李四","23","1999-11-11");

        stuArray[0] = stu1;
        stuArray[1] = stu2;
    }

    //添加学生
    public boolean addStudent(Student stu) {
        //2. 先定义一个标记: int index = -1, 表示当前数组中没有索引位置可以用来存放要添加的学生对象
        int index = -1;

        //3. 遍历数组
        for (int i = 0; i < stuArray.length; i++) {
            //获取当前索引位置的元素
            Student student = stuArray[i];
            if (student == null) {
                //能进来说明有位置空缺,可以用来存放要添加的学生对象,这时我们就用index记录下当前的索引
                index = i;
                //结束循环,避免占用后面的空位
                break;
            }
        }

        //4. 出了循环,根据index的值就能确定本次要添加的学生对象能不能往数组里存了
        if (index == -1){
            return false;   //表示添加失败,因为没位置装数据了
        }else {
            //将要添加的学生对象赋值到数组的index索引位置
            stuArray[index] = stu;
            return true;
        }
    }

    //查询所有学生对象并返回
    public Student[] findAllStudent() {
        return stuArray;
    }

    //删除学生
    public void deleteStudent(String delId) {
        //1. 找到delId在数组容器中对应的索引位置
        int index = getIndex(delId);
        //2. 用null将该索引位置的学生对象覆盖掉,从而实现删除效果
        stuArray[index] = null;
    }

    //修改学生
    public void updateStudent(String updateId, Student stu) {
        //1. 找到delId在数组容器中对应的索引位置
        int index = getIndex(updateId);
        //2. 用null将该索引位置的学生对象覆盖掉,从而实现删除效果
        stuArray[index] = stu;
    }

    //获取指定学号在数组中的索引位置
    public int getIndex(String updateId) {
        // 1.1 先假设delId在数组中不存在
        int index = -1;

        //1.2 遍历数组容器
        for (int i = 0; i < stuArray.length; i++) {
            //1.3 获取当前索引位置的元素
            Student stu = stuArray[i];
            //1.4 将stu的id和delId进行匹配
            if (stu != null && stu.getSid().equals(updateId)){
                index = i;
                break;
            }
        }
        return index;
    }
}
